package com.task.core.service;

import java.util.List;

import com.task.common.enums.QuestionInfoTypeEnum;
import com.task.common.info.QuestionShowInfo;
import com.task.core.dto.request.QuestionInfoRequestDTO;
import com.task.core.dto.request.QuestionRequestDTO;
import com.task.core.vo.resp.QuestionShowRespVo;

/**
 * @author 迪迦.
 * @date 2025/2/11 10:26
 */
public interface QuestionInfoService {

  /**
   * 获取受影响的codes
   * @param questionType 问题类型
   * @param operationCode 操作的code
   * @return 受影响的codes
   */
  List<String> getDataCodes(QuestionInfoTypeEnum questionType, String operationCode);

  /**
   * 修改会影响其他模块功能的数据时添加对应被影响数据的问题记录.
   * @param request 请求参数
   */
  void insertQuestion(QuestionInfoRequestDTO request);

  /**
   * 修复受改数据后被影响的关联数据问题.
   * @param request 请求参数
   */
  void fixQuestion(QuestionInfoRequestDTO request);

  /**
   * 每次提交更新数据时判断数据是否已更新
   * @param type  操作的数据类型
   * @param nextCode  关联的上层code
   * @param versionCode  提交的版本code
   * @return code和版本编号组合查询,返回零代表数据已更新,返回false代表数据已被更新,true代表可用
   */
  boolean checkVersionCode(QuestionInfoTypeEnum type, String nextCode, String versionCode);

  /**
   * 根据类型和数据code获取对应的问题记录
   * @param type 问题类型
   * @param dataCode  数据code
   * @return  问题记录
   */
  List<QuestionShowInfo> getQuestionInfosByTypeAndCode(String type, String dataCode);

  /**
   * 根据类型和数据code获取对应的问题记录
   * @param type 问题类型
   * @param dataCode  数据codes
   * @return  问题记录
   */
  List<QuestionShowInfo> getQuestionInfosByTypeAndCodes(String type, List<String> dataCode);

  void insertQuestionByTypeIsMission(String code);

    QuestionShowInfo getQuestionInfosByMissionTypeAndCode(String name, String missionCode);

  void updatetQuestionByTypeIsMission(String code);

  List<QuestionShowRespVo> getQuestionByPage(QuestionRequestDTO request);

  void deleteQuestion(String questionCode);

  void chackFixQuestion(String questionCode);

}
